AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Fmx] App crasht OnScreenRotation

Ein Thema von Rollo62 · begonnen am 18. Feb 2016 · letzter Beitrag vom 18. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2      
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#1

[Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 11:47
Hallo Leute,

ich bräuchte mal dringend eure Hilfe, ein Projekt das schon etwas weiter war crasht when der Screen gedreht wird.

[RadStudio 10 Seattle, Upd1, XCode 7.2, VmWare 8.2, Win8.1].
Crash getested im Moment unter Android, womöglich auch unter iOS.

Natürlich habe ich erstmal alle Codes von mit gecheckt, und dann den Code soweit abgespeckt das nur noch ein
Fmx Gerüst übrig bleibt.

Hier ist ein Demo wo der Crash auch passiert, es sind nur noch Visual Komponenten drin, ohne irgendeine Funktion,
ein Stylebook (crash aber auch wenn ich es nicht verbinde).

Ich benutze zur Organisation Header, Body und Footer Panels, in die TabControl sitzen welche verschiedene Views
zeigen können. Die Views (Panels) sind im Demo hier aber auch leer.
Wie kann das abstürzen ??

Ich bin ziemlich ratlos was dies jetzt wieder sein könnte, habe AppEvents und ScreenOrientationMessage abgefangen in ein Memo.

Es passiert Folgendes: (unter Android getestet, wie es jetzt bei iOS ist habe ich nicht getestet)
- Es startet immer OK, egal ob H oder V ScreenOrientation
- nur wenn die laufende App gedreht wird crasht es, und es werden folgene Events geschickt
- OnScreenOrientation change message (ja klar)
- WillBecomBackground (warum ?)
- WillTerminate (??? Hilfe)

Hat vielleocht jemand ein Idee ?
Angehängte Dateien
Dateityp: zip T80_ScreenOrientCrash.zip (3,00 MB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 12:08
Bist du sicher, dass sie crasht und nicht normal beendet wird? Es ist nämlich tatsächlich so, dass Android eine App nicht nachträglich rotieren kann. Die App wird intern jedes mal, wenn man den Bildschirm dreht, beendet und mit der neuen Auflösung neugestartet. Da bin ich vor ein paar Jahren auch drüber gestolpert, als ich mal ein bisschen mit App-Entwicklung für Android rumgespielt hatte (mit Java). Das hat Google wirklich dumm gelöst.

Ich glaube, man konnte es irgendwie verhindern, war aber ein undokumentiertes Feature. Wobei man prinzipiell seine App aber eh so schreiben muss, dass sie jeder Zeit unterbrochen werden kann, weil Apps im Hintergrund automatisch terminiert werden können, um den Energieverbrauch zu senken. Also macht man es besser gleich richtig.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#3

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 12:31
Eigentlich sollte der Bildschirm drehen, das funktionierte bisher immer.

Hier ist vor kurzem auch ein Beispiel von Sir Rufo http://www.delphipraxis.net/1330575-post2.html
Das habe ich getestet und es dreht sich wunderbar unter verschiedenen Geräten.

Es ist aber so wie ich geschrieben hatte, Android oder Fmx senden
WillBecomeBackground und WillTerminate

Also was kann das sein ?

Ich habe schon versucht Application/ScreenOrientation festzusetzen, aber das kracht auch.

Vermutlich liegt es doch irgendwo an den Komponenten selbst.
Z.B. TMultiView fragt auch die ScreenOrientation ab (benutze ich aber im Beispiel nicht mehr), könnten
irgendwelche anderen Komponenten abstürzen wenn das Device gedreht wird ?



Rollo

Geändert von Rollo62 (18. Feb 2016 um 12:33 Uhr) Grund: Typo
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 12:58
Bist du sicher, dass sie crasht und nicht normal beendet wird? Es ist nämlich tatsächlich so, dass Android eine App nicht nachträglich rotieren kann. Die App wird intern jedes mal, wenn man den Bildschirm dreht, beendet und mit der neuen Auflösung neugestartet. Da bin ich vor ein paar Jahren auch drüber gestolpert, als ich mal ein bisschen mit App-Entwicklung für Android rumgespielt hatte (mit Java). Das hat Google wirklich dumm gelöst.

Ich glaube, man konnte es irgendwie verhindern, war aber ein undokumentiertes Feature. Wobei man prinzipiell seine App aber eh so schreiben muss, dass sie jeder Zeit unterbrochen werden kann, weil Apps im Hintergrund automatisch terminiert werden können, um den Energieverbrauch zu senken. Also macht man es besser gleich richtig.
Keine Ahnung, wo du das her hast, aber das ist Quatsch. Unsere App unter Android lässt sich auch ohne Probleme rotieren und die kann man nicht so einfach beenden, weil da eine Datenbank mit Anmeldung dahintersteht.
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 13:03
Lösche mal die AndroidManifest.template.xml und lass die neu erzeugen. Ich denke dann funktioniert es. Problem liegt vermutlich an dieser Stelle:


Code:
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                android:label="%activityLabel%"
                android:configChanges="orientation|keyboardHidden"
                android:launchMode="singleTask">
Da fehlen einige Einträge, mal als Vergleich die von uns:

Code:
<activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
                android:label="%activityLabel%"
                android:configChanges="orientation|keyboard|keyboardHidden|navigation|screenLayout|screenSize"
                android:launchMode="singleTask">
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#6

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 13:04
Also ich habe mittlerweile das Demo immer weiter abgespeckt:
- TabControls raus - crash
- Panels raus - crash
- Stylebook raus - crash
- DataModule raus - crash
- alle uses die unbenutzt sind raus -crash

Natürlich immer alle DCUs etc gelöcht, das ganze Android Verzeichnis - crash

Das macht mir langsam Angst
Ich habe jetzt nur noch die Form it einem Memo das die AppEvents und ScreenOrientation zeigt - crash

Hab die abgespeckte Demo nochmal im Anhang T81_....

Delphi-Quellcode:
unit UMain_Frm;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes
  , FMX.Forms
// , System.Variants
// FMX.Types, FMX.Controls, FMX.Forms, FMX.StdCtrls,
// FMX.Layouts, FMX.Objects, FMX.ImgList,
// FMX.Controls.Presentation
  , FMX.Platform
// , FMX.ScrollBox
  , FMX.Memo
  , System.Messaging, FMX.Types, FMX.Controls, FMX.Controls.Presentation,
  FMX.ScrollBox
  ;

type
  TMain_Frm = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FOrientationChangedId: Integer;
    { Private declarations }

    procedure EvOnOrientationChanged(const Sender: TObject; const Msg: TMessage);
    function EvOnAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;

    procedure Log(const ALog : String);

  public
    { Public declarations }
  end;

var
  Main_Frm: TMain_Frm;

implementation

{$R *.fmx}

procedure TMain_Frm.FormCreate(Sender: TObject);
var
  aFMXApplicationEventService: IFMXApplicationEventService;
begin

  if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(aFMXApplicationEventService)) then
    aFMXApplicationEventService.SetApplicationEventHandler(EvOnAppEvent)
  else
    Log('Application Event Service is not supported.');


  //Subscribe to orientation change events in OnCreate or similar
  FOrientationChangedId := TMessageManager.DefaultManager.SubscribeToMessage(
       TOrientationChangedMessage, EvOnOrientationChanged);


end;





procedure TMain_Frm.FormDestroy(Sender: TObject);
begin
  //Unsubscribe from orientation change events in OnDestroy or similar
  TMessageManager.DefaultManager.Unsubscribe(TOrientationChangedMessage, FOrientationChangedId);
end;

procedure TMain_Frm.Log(const ALog: String);
begin
  Memo1.Lines.Insert(0, ALog);

end;


procedure TMain_Frm.EvOnOrientationChanged(const Sender: TObject; const Msg: TMessage);
begin
  Log('Orientation changed: ' + Msg.ToString);
end;


function TMain_Frm.EvOnAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
begin

  case AAppEvent of
    TApplicationEvent.FinishedLaunching: Log('Finished Launching');
    TApplicationEvent.BecameActive: Log('Became Active');
    TApplicationEvent.WillBecomeInactive: Log('Will Become Inactive');
    TApplicationEvent.EnteredBackground: Log('Entered Background');
    TApplicationEvent.WillBecomeForeground: Log('Will Become Foreground');
    TApplicationEvent.WillTerminate: Log('Will Terminate');
    TApplicationEvent.LowMemory: Log('AppEvent: Low Memory');
    TApplicationEvent.TimeChange: Log('AppEvent: Time Change');
    TApplicationEvent.OpenURL: Log('AppEvent: Open URL');
    else
                                            Log('AppEvent: Unknown');
  end;
  Result := True;
end;

end.
Angehängte Dateien
Dateityp: zip T81_ScreenOrientCrash.zip (356,2 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#7

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 13:07
@bra

Dankesehr, du bist mein Retter.
Das wars.

Wie kann denn sowas passieren ?

Also ist mein neuer Fmx-RescuePlan: vor jedem Build die xml löschen.

Danke, danke, danke

Rollo
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 13:12
Bei uns ist die App ursprünglich abgestürzt, sobald eine Bluetooth-Tastatur angeschlossen wurde. Das war derselbe Grund gewesen. Scheinbar werden die XMLs immer mal erweitert
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#9

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 13:15
@bra

So ganz verstehe ich es noch nicht, es stimmt immer noch nicht mit deinem Template überein.
Aber es dreht jetzt wenigstens.

clipboard01.jpg

Links ist neu angeletes Template, rechts das alte, korrupte Template.

Was hat das jetzt mit dem ScreenOrientation zu tun, vieleicht hat noch jemand eine Erklärung ?

Was sollte ich denn in Fmx Einstellen damit das Template möglichst Narrensicher wird ?

Rollo
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

AW: [Fmx] App crasht OnScreenRotation

  Alt 18. Feb 2016, 13:24
Keine Ahnung, wo du das her hast, aber das ist Quatsch. Unsere App unter Android lässt sich auch ohne Probleme rotieren und die kann man nicht so einfach beenden, weil da eine Datenbank mit Anmeldung dahintersteht.
Ok, habe mich insofern geirrt, als dass das Flag zum Abstellen dieses Verhaltens nicht undokumentiert ist. Es wird aber trotzdem davon abgeraten, sich darauf zu verlassen, weil eben auch andere Ereignisse Neustarts der App auslösen können.

Siehe
Bei uns ist die App ursprünglich abgestürzt, sobald eine Bluetooth-Tastatur angeschlossen wurde. Das war derselbe Grund gewesen. Scheinbar werden die XMLs immer mal erweitert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz